#include "RR.h"
#include <stdio.h>
#include <stdlib.h>

int
all_done (Process *processes, int n)
{
  for (int i = 0; i < n; i++)
    if (processes[i].burst_time > 0)
      return 0;
  return 1;
}

/**
 * 函数: calculateTimes
 * 功能: 根据时间片轮转调度算法计算每个进程的完成时间、周转时间和等待时间
 *
 * 参数:
 *  - processes: 指向包含多个进程信息的数组
 *  - n: 进程数量
 *  - time_slice: 时间片长度
 *
 * 描述:
 *  计算进程的完成时间，周转时间和等待时间并存在结构体中即可
 */
void
calculateTimes (Process *processes, int n, int time_slice)
{
  // 假定采用FIFO
  int pid = 0;
  int t = 0;
  while( all_done(processes, n) == 0) {
    if (processes[pid].burst_time > 0) {
      if (processes[pid].burst_time > time_slice) {
        t += time_slice;
        processes[pid].burst_time -= time_slice;
      } else {
        t += processes[pid].burst_time;
        processes[pid].burst_time = 0;
        processes[pid].completion_time = t;
        processes[pid].turnaround_time = processes[pid].completion_time - processes[pid].arrival_time;
        processes[pid].waiting_time = processes[pid].turnaround_time - processes[pid].remaining_time;
      }
    }
    pid = (pid + 1) % n;
  }
}